package br.com.werp.regras.geral.vos.tesouraria;

import br.com.werp.regras.geral.util.Dia;
import br.com.werp.regras.geral.vos.documento.DocumentoImpostoVO;
import br.com.werp.regras.geral.vos.tabelas.Imposto;
import br.com.werp.regras.geral.vos.tabelas.Imposto_calculo;
import br.com.werp.regras.geral.vos.tabelas.Imposto_tabela;

import java.io.Serializable;

import java.sql.Timestamp;


/**
 * @author Sobreira
 * Created on 12/11/2004
 *
 */
public class ImpostoVO implements Serializable {
    private static final long serialVersionUID = -6097959106745777155L;
    public static final String IMPOSTO_SEM_TABELA = "IMPOSTO_SEM_TABELA";
    public static final String IMPOSTO_TABELA_COM_INICIO_FUTURO =
        "IMPOSTO_TABELA_COM_INICIO_FUTURO";
    public static final String FAIXA_IMPOSTO_CALCULO_NAO_ENCONTRADA =
        "FAIXA_IMPOSTO_CALCULO_NAO_ENCONTRADA";
    public static final String IMPOSTO_SEM_CALCULO = "IMPOSTO_SEM_CALCULO";
    public static final String TIPO_IMPOSTO_NAO_SE_APLICA_AO_TIPO_PESSOA =
        "TIPO_IMPOSTO_NAO_SE_APLICA_AO_TIPO_PESSOA";
    public static final String DATA_EMISSAO_NULA = "DATA_EMISSAO_NULA";
    public static String[] PROPRIEDADES_EXCLUIDAS =
        {
            "documentoImpostoVO", "baseCalculo", "valor", "customizado", "info",
            "imposto", "imposto_tabela", "imposto_calculo", "dataEmissao"
        };
    private DocumentoImpostoVO documentoImpostoVO = new DocumentoImpostoVO();
    private Imposto_calculo imposto_calculo = new Imposto_calculo();
    private Imposto_tabela imposto_tabela = new Imposto_tabela();
    private Imposto imposto = new Imposto();
    private String info;

    //customizados
    private double valor;
    private double baseCalculo;
    private boolean customizado;
    private Dia dataEmissao;

    public ImpostoVO() {
    }

    public ImpostoVO(int impt_id) {
        this.setImpt_id(impt_id);
    }

    public Dia getDataEmissao() {
        return dataEmissao;
    }

    public void setDataEmissao(Dia dataEmissao) {
        this.dataEmissao = dataEmissao;
    }

    public DocumentoImpostoVO getDocumentoImpostoVO() {
        return documentoImpostoVO;
    }

    public void setDocumentoImpostoVO(DocumentoImpostoVO documentoImpostoVO) {
        this.documentoImpostoVO = documentoImpostoVO;
    }

    public boolean equals(Object obj) {
        ImpostoVO impostoVO = (ImpostoVO) obj;

        return this.getImpt_id() == impostoVO.getImpt_id();
    }

    public int hashCode() {
        return this.getImpt_id();
    }

    public double getBaseCalculo() {
        return baseCalculo;
    }

    public void setBaseCalculo(double baseCalculo) {
        if (baseCalculo < 0) {
            baseCalculo = 0;
        }

        this.baseCalculo = baseCalculo;
    }

    public double getValor() {
        if ((valor == 0) && (documentoImpostoVO != null) &&
                (documentoImpostoVO.getDocumentoVencimentoVO() != null)) {
            return documentoImpostoVO.getDocumentoVencimentoVO().getDcve_valor();
        }

        return valor;
    }

    public void setValor(double valor) {
        if (valor < 0) {
            valor = 0;
        }

        this.valor = valor;
    }

    public boolean isCustomizado() {
        return customizado;
    }

    public void setCustomizado(boolean customizado) {
        this.customizado = customizado;
    }

    public String getImpt_cod_recolhim() {
        return imposto.getImpt_cod_recolhim();
    }

    public String getImpt_descricao() {
        return imposto.getImpt_descricao();
    }

    public String getImpt_fato_gerador() {
        return imposto.getImpt_fato_gerador();
    }

    public int getImpt_id() {
        return imposto.getImpt_id();
    }

    public String getImpt_ir_tipo() {
        return imposto.getImpt_ir_tipo();
    }

    public int getImpt_pessoa() {
        return imposto.getImpt_pessoa();
    }

    public int getImpt_prioridade() {
        return imposto.getImpt_prioridade();
    }

    public String getImpt_sigla() {
        return imposto.getImpt_sigla();
    }

    public int getImpt_tipo_documento() {
        return imposto.getImpt_tipo_documento();
    }

    public void setImpt_cod_recolhim(String IMPT_COD_RECOLHIM) {
        imposto.setImpt_cod_recolhim(IMPT_COD_RECOLHIM);
    }

    public void setImpt_descricao(String IMPT_DESCRICAO) {
        imposto.setImpt_descricao(IMPT_DESCRICAO);
    }

    public void setImpt_fato_gerador(String IMPT_FATO_GERADOR) {
        imposto.setImpt_fato_gerador(IMPT_FATO_GERADOR);
    }

    public void setImpt_id(int IMPT_ID) {
        imposto.setImpt_id(IMPT_ID);
    }

    public void setImpt_ir_tipo(String IMPT_IR_TIPO) {
        imposto.setImpt_ir_tipo(IMPT_IR_TIPO);
    }

    public void setImpt_pessoa(int IMPT_PESSOA) {
        imposto.setImpt_pessoa(IMPT_PESSOA);
    }

    public void setImpt_prioridade(int IMPT_PRIORIDADE) {
        imposto.setImpt_prioridade(IMPT_PRIORIDADE);
    }

    public void setImpt_sigla(String IMPT_SIGLA) {
        imposto.setImpt_sigla(IMPT_SIGLA);
    }

    public void setImpt_tipo_documento(int IMPT_TIPO_DOCUMENTO) {
        imposto.setImpt_tipo_documento(IMPT_TIPO_DOCUMENTO);
    }

    public double getImcl_aliquota() {
        return imposto_calculo.getImcl_aliquota();
    }

    public double getImcl_faixa_final() {
        return imposto_calculo.getImcl_faixa_final();
    }

    public double getImcl_faixa_inicial() {
        return imposto_calculo.getImcl_faixa_inicial();
    }

    public int getImcl_id() {
        return imposto_calculo.getImcl_id();
    }

    public double getImcl_parcela_deduzir() {
        return imposto_calculo.getImcl_parcela_deduzir();
    }

    public int getImcl_tabela() {
        return imposto_calculo.getImcl_tabela();
    }

    public void setImcl_aliquota(double IMCL_ALIQUOTA) {
        imposto_calculo.setImcl_aliquota(IMCL_ALIQUOTA);
    }

    public void setImcl_faixa_final(double IMCL_FAIXA_FINAL) {
        imposto_calculo.setImcl_faixa_final(IMCL_FAIXA_FINAL);
    }

    public void setImcl_faixa_inicial(double IMCL_FAIXA_INICIAL) {
        imposto_calculo.setImcl_faixa_inicial(IMCL_FAIXA_INICIAL);
    }

    public void setImcl_id(int IMCL_ID) {
        imposto_calculo.setImcl_id(IMCL_ID);
    }

    public void setImcl_parcela_deduzir(double IMCL_PARCELA_DEDUZIR) {
        imposto_calculo.setImcl_parcela_deduzir(IMCL_PARCELA_DEDUZIR);
    }

    public void setImcl_tabela(int IMCL_TABELA) {
        imposto_calculo.setImcl_tabela(IMCL_TABELA);
    }

    public int getImtb_id() {
        return imposto_tabela.getImtb_id();
    }

    public int getImtb_imposto() {
        return imposto_tabela.getImtb_imposto();
    }

    public Timestamp getImtb_inicio() {
        return imposto_tabela.getImtb_inicio();
    }

    public double getImtb_valor_dependente() {
        return imposto_tabela.getImtb_valor_dependente();
    }

    public void setImtb_id(int IMTB_ID) {
        imposto_tabela.setImtb_id(IMTB_ID);
    }

    public void setImtb_imposto(int IMTB_IMPOSTO) {
        imposto_tabela.setImtb_imposto(IMTB_IMPOSTO);
    }

    public void setImtb_inicio(Timestamp IMTB_INICIO) {
        imposto_tabela.setImtb_inicio(IMTB_INICIO);
    }

    public void setImtb_valor_dependente(double IMTB_VALOR_DEPENDENTE) {
        imposto_tabela.setImtb_valor_dependente(IMTB_VALOR_DEPENDENTE);
    }

    public int getImpt_composicao() {
        return imposto.getImpt_composicao();
    }

    public int getImpt_tipo_vencimento() {
        return imposto.getImpt_tipo_vencimento();
    }

    public void setImpt_composicao(int IMPT_COMPOSICAO) {
        imposto.setImpt_composicao(IMPT_COMPOSICAO);
    }

    public void setImpt_tipo_vencimento(int IMPT_TIPO_VENCIMENTO) {
        imposto.setImpt_tipo_vencimento(IMPT_TIPO_VENCIMENTO);
    }

    public Imposto getImposto() {
        return imposto;
    }

    public Imposto_calculo getImposto_calculo() {
        return imposto_calculo;
    }

    public Imposto_tabela getImposto_tabela() {
        return imposto_tabela;
    }

    public String getInfo() {
        return info;
    }

    public void setImposto(Imposto imposto) {
        this.imposto = imposto;
    }

    public void setImposto_calculo(Imposto_calculo imposto_calculo) {
        this.imposto_calculo = imposto_calculo;
    }

    public void setImposto_tabela(Imposto_tabela imposto_tabela) {
        this.imposto_tabela = imposto_tabela;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}
